package com.kx.my05;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
 * 引用类型
 *
 * @Autowired：spring框架提供的注解，实现引用类型的赋值。
 *             spring中通过注解给引用类型赋值，使用的是自动注入原理，支持byName，byType
 * @Autowired：默认byType自动注入。
 *  属性：required，是一个boolean类型的，默认true
 *      required=true：表示引用类型赋值失败，程序报错，并终止执行。
 *      required=false：表示类型如果赋值失败，程序正常执行，引用类型为null
 *
 *  位置：1、在属性定义的上面，无需set方法，推荐使用。
 *      2、在set方法的上面
 *
 * 如果要使用byName方式，需要做的是：
 * 1、在属性上面加入@Autowired
 * 2、在属性上面加入@Qualifier(value="bean的id")：表示使用指定名称的bean完成赋值
 */
@Component(value = "myStudent")
public class Student {
    @Value("lisi")
    private String name;
    @Value("1001")
    private Integer id;
    @Autowired
    @Qualifier("mySchool")
    private School school;

    public Student() {
        System.out.println("Student05无参构造");
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", school=" + school +
                '}';
    }
}
